<!DOCTYPE html>
<html lang="en-us">
<head><head>
    <meta name="google-site-verification" content="9vIieCe-Qpd78QOmBl63rGtIVbhY6sYyuxX3j8XWBA4" />
    <meta name="baidu-site-verification" content="LRrmH41lz7" />
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="google-site-verification" content="xBT4GhYoi5qRD5tr338pgPM5OWHHIDR6mNg1a3euekI" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="baidu-site-verification" content="HGLXRsUXC4" />

    
    <meta name="baidu-site-verification" content="code-ANZvlnN0Xr" />

    
    <meta name="description" content="docker swarm在容器编排的战争中已经输给了K8S，但是在小规模团队或人力有限的情况下，使用docker swarm进行容器编排还是不错的。">
    
    <meta name="keyword"  content="liangyuanpeng|LanLiang|OpenYurt|Knative|Pulsar|Prometheus|Halo||边缘计算kubernetes|Docker|CloudNative|Golang|Rust|Istio|微服务">
    <link rel="shortcut icon" href="img/logo.png">


    
    <meta property="og:image" content="https://res.cloudinary.com/lyp/image/upload/v1544363190/hugo/blog.github.io/19375a83fc004035fb1102a4551f2287.jpg" />
    <meta name="twitter:image" content="https://res.cloudinary.com/lyp/image/upload/v1544363190/hugo/blog.github.io/19375a83fc004035fb1102a4551f2287.jpg" />


    <title>部署docker swarm集群监控-liangyuanpeng的博客 | liangyuanpeng&#39;s Blog</title>

    <link rel="canonical" href="/post/deploy-docker-swarm-monitoring/">

    <link rel="stylesheet" href="https://res.cloudinary.com/lyp/raw/upload/v1537369740/hugo/css/iDisqus.min.css"/>

    
    <link rel="stylesheet" href="https://res.cloudinary.com/lyp/raw/upload/v1537369744/hugo/css/bootstrap.min.css">

    
    <link rel="stylesheet" href="https://res.cloudinary.com/lyp/raw/upload/v1537369740/hugo/css/hux-blog.min.css">

    
    <link rel="stylesheet" href="https://res.cloudinary.com/lyp/raw/upload/v1537369740/hugo/css/syntax.css">

    
    <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" type="text/css">
    
    
    <script src="https://res.cloudinary.com/lyp/raw/upload/v1537369966/hugo/js/jquery.min.js"></script>

    
    <script src="https://res.cloudinary.com/lyp/raw/upload/v1537369966/hugo/js/bootstrap.min.js"></script>

    
    <script src="https://res.cloudinary.com/lyp/raw/upload/v1537369964/hugo/js/hux-blog.min.js"></script>

    
    <script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "f73bc0092aeb491d89984c0eb5a87ac2"}'></script>
</head>

</head>

<nav class="navbar navbar-default navbar-custom navbar-fixed-top">
    <div class="container-fluid">
        
        <div class="navbar-header page-scroll">
            <button type="button" class="navbar-toggle">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">Hi,I`m lan</a>
        </div>

        
        
        <div id="huxblog_navbar">
            <div class="navbar-collapse">
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="/">Home</a>
                    </li>
                    
                    <li>
                        <a href="categories/cloudnative">cloudnative</a>
                    </li>
                    
                    <li>
                        <a href="categories/devops">devops</a>
                    </li>
                    
                    <li>
                        <a href="categories/iot">iot</a>
                    </li>
                    
                    <li>
                        <a href="categories/kubernetes">kubernetes</a>
                    </li>
                    
                    <li>
                        <a href="categories/tech">tech</a>
                    </li>
                    

                    
		            <li>
                        <a href="search">SEARCH <img src="img/search.png" height="15" style="cursor: pointer;"></a>
		            </li>
                    
                </ul>
            </div>
        </div>
        
    </div>
    
</nav>
<script>
    
    
    
    var $body   = document.body;
    var $toggle = document.querySelector('.navbar-toggle');
    var $navbar = document.querySelector('#huxblog_navbar');
    var $collapse = document.querySelector('.navbar-collapse');

    $toggle.addEventListener('click', handleMagic)
    function handleMagic(e){
        if ($navbar.className.indexOf('in') > 0) {
        
            $navbar.className = " ";
            
            setTimeout(function(){
                
                if($navbar.className.indexOf('in') < 0) {
                    $collapse.style.height = "0px"
                }
            },400)
        }else{
        
            $collapse.style.height = "auto"
            $navbar.className += " in";
        }
    }
</script>




<style type="text/css">
    header.intro-header{
        background-image: url('https://res.cloudinary.com/lyp/image/upload/v1544363190/hugo/blog.github.io/19375a83fc004035fb1102a4551f2287.jpg')
    }
</style>
<header class="intro-header" >
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                <div class="post-heading">
                    <div class="tags">
                       
                       <a class="tag" href="/tags/docker" title="Docker">
                           Docker
                        </a>
                        
                       <a class="tag" href="/tags/docker-swarm" title="Docker Swarm">
                           Docker Swarm
                        </a>
                        
                    </div>
                    <h1>部署docker swarm集群监控</h1>
                    <h2 class="subheading"></h2>
                    <span  class="meta">Posted by 梁远鹏 on 2020-02-09
                        
                        <span id="busuanzi_container_page_pv">|<span id="busuanzi_value_page_pv"></span><span>
                            <span id="/post/deploy-docker-swarm-monitoring/" class="leancloud_visitors meta_data_item" data-flag-title="">
    <span class="post-meta-item-icon">
      <span class="octicon octicon-eye"></span> 
    </span>
    <i class="fa fa-eye"></i>
    <span class="old-visitors-count" style="display: none;"></span>
    <span class="leancloud-visitors-count"></span>
</span>






                            阅读 </span></span>|<span class="post-date">共2210字</span>，阅读约<span class="more-meta"> 5 分钟</span>
                        
                    </span>
                </div>
            </div>
        </div>
    </div>
</header>




<article>
    <div class="container">
        <div class="row">

            
            <div class="
                col-lg-8 col-lg-offset-2
                col-md-10 col-md-offset-1
                post-container">

		
                <header>
                <h2>TOC</h2>
                </header>
                <nav id="TableOfContents">
  <ul>
    <li><a href="#前言">前言</a></li>
    <li><a href="#整体思路">整体思路</a></li>
    <li><a href="#演示环境">演示环境</a></li>
    <li><a href="#初始化docker-swarm">初始化Docker Swarm</a></li>
    <li><a href="#在master机器上查看当前的node节点">在master机器上查看当前的node节点</a></li>
    <li><a href="#在docker-swarm部署监控服务">在Docker Swarm部署监控服务</a></li>
    <li><a href="#查看服务的部署情况">查看服务的部署情况</a></li>
    <li><a href="#为cadvisor配置influxdb数据库">为cadvisor配置influxdb数据库</a></li>
    <li><a href="#配置grafana">配置grafana</a>
      <ul>
        <li><a href="#配置数据源">配置数据源</a></li>
        <li><a href="#配置grafana视图模版">配置grafana视图模版</a></li>
      </ul>
    </li>
    <li><a href="#总结">总结</a></li>
  </ul>
</nav>
		
		<h1 id="前提">前提</h1>
<ol>
<li>Docker</li>
</ol>
<h2 id="前言">前言</h2>
<p>现在Docker Swarm已经彻底输给了K8S,但是现在K8S依然很复杂，上手难度较Docker Swarm高，如果是小规模团队且需要容器编排的话，使用Docker Swarm还是适合的。</p>
<p>目前Docker Swarm有一个问题一直没有解决，如果业务需要知道用户的请求IP,则Docker Swarm满足不了要求。目前部署在Docker Swarm内的服务,无法获取到用户的请求IP。</p>
<p>具体可以看看这个ISSUE-&gt;<a href="https://github.com/moby/moby/issues/25526">Unable to retrieve user&rsquo;s IP address in docker swarm mode</a></p>
<h2 id="整体思路">整体思路</h2>
<p>思路整体来说是使用Influxdb+Grafana+cadvisor,其中<code>cadvisor</code>负责数据的收集，每一台节点都部署一个cadvisor服务,Influxdb负责数据的存储,Grafana负责数据的可视化。</p>
<p><img src="https://res.cloudinary.com/lyp/image/upload/v1581387851/hugo/blog.github.io/docker/docker-swarm-monitor-process.png" alt="https://res.cloudinary.com/lyp/image/upload/v1581387851/hugo/blog.github.io/docker/docker-swarm-monitor-process.png"></p>
<h2 id="演示环境">演示环境</h2>
<table>
<thead>
<tr>
<th>主机</th>
<th>IP</th>
</tr>
</thead>
<tbody>
<tr>
<td>master(manager)</td>
<td>192.168.1.60</td>
</tr>
<tr>
<td>node1(worker)</td>
<td>192.168.1.61</td>
</tr>
<tr>
<td>node2(worker)</td>
<td>192.168.1.62</td>
</tr>
</tbody>
</table>
<p><img src="https://res.cloudinary.com/lyp/image/upload/v1581387850/hugo/blog.github.io/docker/docker-swarm-monitor-node.png" alt="https://res.cloudinary.com/lyp/image/upload/v1581387850/hugo/blog.github.io/docker/docker-swarm-monitor-node.png"></p>
<p>我这里是将master节点当作监控数据存储以及可视化服务的节点作为演示,一般是拿一个worker节点做这样的工作。</p>
<h2 id="初始化docker-swarm">初始化Docker Swarm</h2>
<p>在master机器上初始化集群,运行<br>
<code>docker swarm init --advertise-addr {MASTER-IP}</code></p>
<pre><code>[root@master ~]# docker swarm init --advertise-addr 192.168.1.60

Swarm initialized: current node (138n5rwjz83y8goyzepp1cdo7) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j 192.168.1.60:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions

</code></pre><p>在node节点运行提示的命令加入到集群中<br>
<code>docker swarm join --token SWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j 192.168.1.60:2377</code><br>
manager节点初始化集群后，都会有这样一个提示，这个的命令只是给个示例，实际命令需要根据初始化集群后的真实情况来运行。</p>
<pre><code>[root@node1 ~]#  docker swarm join --token SWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j 192.168.1.60:2377
This node joined a swarm as a worker.
</code></pre><pre><code>[root@node2 ~]#  docker swarm join --token SWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j 192.168.1.60:2377
This node joined a swarm as a worker.
</code></pre><h2 id="在master机器上查看当前的node节点">在master机器上查看当前的node节点</h2>
<p><code>docker node ls</code></p>
<pre><code>[root@master ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
138n5rwjz83y8goyzepp1cdo7 *   master              Ready               Active              Leader              18.09.8
q03by75rqur63lx36cmordf11     node1               Ready               Active                                  18.09.8
6shdf5ej4b5u7x877bg9nyjk3     node2               Ready               Active 
</code></pre><p>到目前为止集群已经搭建完成了，接下来开始部署服务</p>
<h2 id="在docker-swarm部署监控服务">在Docker Swarm部署监控服务</h2>
<p><code>docker stack deploy -c docker-compose-monitor.yml monitor</code></p>
<pre><code>[root@master ~]# docker stack deploy -c docker-compose-monitor.yml monitor
Creating network monitor_default
Creating service monitor_influx
Creating service monitor_grafana
Creating service monitor_cadvisor
</code></pre><p><code>docker-compose-monitor.yml</code>文件内容</p>
<pre><code>version: '3'

services:
 influx:
   image: influxdb
   volumes:
     - influx:/var/lib/influxdb
   deploy:
     replicas: 1
     placement:
       constraints:
         - node.role == manager

 grafana:
   image: grafana/grafana
   ports:
     - 0.0.0.0:80:3000
   volumes:
     - grafana:/var/lib/grafana
   depends_on:
     - influx
   deploy:
     replicas: 1
     placement:
       constraints:
         - node.role == manager

 cadvisor:
   image: google/cadvisor
   hostname: '{{.Node.Hostname}}'
   command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086
   volumes:
     - /:/rootfs:ro
     - /var/run:/var/run:rw
     - /sys:/sys:ro
     - /var/lib/docker/:/var/lib/docker:ro
   depends_on:
     - influx
   deploy:
     mode: global

volumes:
 influx:
   driver: local
 grafana:
   driver: local
</code></pre><p><a href="https://res.cloudinary.com/lyp/raw/upload/v1581252602/hugo/blog.github.io/docker/docker-compose-monitor.yml">下载docker-compose-monitor.yml</a></p>
<h2 id="查看服务的部署情况">查看服务的部署情况</h2>
<p><code>docker service ls</code></p>
<pre><code>[root@master ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                    PORTS
qth4tssf2sm1        monitor_cadvisor    global              3/3                 google/cadvisor:latest   
p2vbxe7ic175        monitor_grafana     replicated          1/1                 grafana/grafana:latest   *:80-&gt;3000/tcp
von1rpeqq7vj        monitor_influx      replicated          1/1                 influxdb:latest  
</code></pre><p>到目前为止，服务已经部署完成了，三台机器各自部署一个<code>cadvisor</code>,在master节点部署了<code>grafana</code>和<code>influxdb</code></p>
<h2 id="为cadvisor配置influxdb数据库">为cadvisor配置influxdb数据库</h2>
<p>查看一下master机器上的服务<br>
<code>docker ps</code></p>
<pre><code>[root@master ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
55965fdf13a3        grafana/grafana:latest   &quot;/run.sh&quot;                3 hours ago         Up 3 hours          3000/tcp            monitor_grafana.1.l9uh0ov7ltk7q2yollmk4x1v9
0bf544c7d81c        google/cadvisor:latest   &quot;/usr/bin/cadvisor -…&quot;   3 hours ago         Up 3 hours          8080/tcp            monitor_cadvisor.138n5rwjz83y8goyzepp1cdo7.l53vufoivp0oe8tyy14nh0jof
3ce050f0483e        influxdb:latest          &quot;/entrypoint.sh infl…&quot;   3 hours ago         Up 3 hours          8086/tcp            monitor_influx.1.vraeh8ektium1j1jd27qvq1au
[root@master ~]# 
</code></pre><p>可以看到是符合预期的，接下来进一步查看<code>cadvisor</code>容器的日志<br>
<code>docker logs -f 0bf544c7d81c</code></p>
<pre><code>[root@master ~]# docker logs -f 0bf544c7d81c
W0209 09:32:15.730951       1 manager.go:349] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory
E0209 09:33:15.783705       1 memory.go:94] failed to write stats to influxDb - {&quot;error&quot;:&quot;database not found: \&quot;cadvisor\&quot;&quot;}
E0209 09:34:15.818661       1 memory.go:94] failed to write stats to influxDb - {&quot;error&quot;:&quot;database not found: \&quot;cadvisor\&quot;&quot;}
E0209 09:35:16.009312       1 memory.go:94] failed to write stats to influxDb - {&quot;error&quot;:&quot;database not found: \&quot;cadvisor\&quot;&quot;}
E0209 09:36:16.027113       1 memory.go:94] failed to write stats to influxDb - {&quot;error&quot;:&quot;database not found: \&quot;cadvisor\&quot;&quot;}
E0209 09:37:16.107051       1 memory.go:94] failed to write stats to influxDb - {&quot;error&quot;:&quot;database not found: \&quot;cadvisor\&quot;&quot;}
E0209 09:38:16.215684       1 memory.go:94] failed to write stats to influxDb - {&quot;error&quot;:&quot;database not found: \&quot;cadvisor\&quot;&quot;}
E0209 09:39:16.305772       1 memory.go:94] failed to write stats to influxDb - {&quot;error&quot;:&quot;database not found: \&quot;cadvisor\&quot;&quot;}

</code></pre><p>可以看到现在一直是在报错的，因为目前的<code>influx</code>容器中没有<code>cadvisor</code>这样的数据库存在，接下来我们进入<code>influx</code>容器并创建对应的<code>cadvisor</code>数据库,在master机器上执行以下命令即可。</p>
<p><code>docker exec `docker ps | grep -i influx | awk '{print $1}'` influx -execute 'CREATE DATABASE cadvisor'</code></p>
<p>当然，也可以分步骤执行</p>
<ol>
<li>找到influxdb的容器</li>
<li>进入到influxdb容器内并登陆influx</li>
<li>创建数据库</li>
</ol>
<p>这里就不演示了。</p>
<h2 id="配置grafana">配置grafana</h2>
<p>到目前为止，数据已经在收集了，并且数据存储在<code>influxdb</code>中。接下来配置grafana将数据进行可视化。</p>
<p>因为docker-compose-monitor.yml文件内给grafna配置的端口是80,这里直接访问master机器的IP就可以访问到grafana,在浏览器打开<code>192.168.1.60</code>.<br>
grafana<br>
默认的帐号是<code>admin</code><br>
默认的密码是<code>admin</code><br>
首次登陆后会提示修改密码，新密码继续设置为<code>admin</code>也没关系。</p>
<p>登陆成功后开始设置数据源</p>
<h3 id="配置数据源">配置数据源</h3>
<ol>
<li>打开左边菜单栏进入数据源配置页面
<img src="https://res.cloudinary.com/lyp/image/upload/v1581251657/hugo/blog.github.io/docker/config_source1.png" alt=""></li>
<li>添加新的数据源,我这里是添加过了,所以会有一个influxdb的数据源显示。<br>
<img src="https://res.cloudinary.com/lyp/image/upload/v1581251657/hugo/blog.github.io/docker/config_source2.png" alt=""></li>
<li>选择influxdb类型的数据源<br>
<img src="https://res.cloudinary.com/lyp/image/upload/v1581251656/hugo/blog.github.io/docker/config_source3.png" alt=""></li>
<li>填写influxdb对应的信息,Name填写<code>influx</code>,因为待会要用到一个grafana模版,所以这里叫influx名字,URL填<code>http://influx:8086</code>,这个也不是固定的,本次<code>docker-compose-monitor.yml</code>文件内<code>influxdb</code>的容器名叫<code>influx</code>,端口开放出来的为8086(<code>默认</code>),所以这里填<code>influx:8086</code><br>
<img src="https://res.cloudinary.com/lyp/image/upload/v1581251945/hugo/blog.github.io/docker/config_source4.png" alt=""></li>
</ol>
<p>到目前为止，数据源相关的内容已经配置完成了。</p>
<h3 id="配置grafana视图模版">配置grafana视图模版</h3>
<p>这里使用模版只是为了演示效果，如果模版的样式不太满意，可以研究下grafana自行调整。</p>
<ol>
<li>首先打开grafana的dashboard市场下载模版<a href="https://grafana.com/grafana/dashboards/4637/reviews">https://grafana.com/grafana/dashboards/4637/reviews</a><br>
<img src="https://res.cloudinary.com/lyp/image/upload/v1581252257/hugo/blog.github.io/docker/download_grafana_temp.png" alt=""></li>
<li>选中dashboard菜单,选中import进行导入
<img src="https://res.cloudinary.com/lyp/image/upload/v1581251657/hugo/blog.github.io/docker/import_dashboard.png" alt=""></li>
<li>打开dashboard就已经可以看到dashboard模版的内容了.<br>
<img src="https://res.cloudinary.com/lyp/image/upload/v1581251656/hugo/blog.github.io/docker/grafana_for_cadvisor.png" alt=""></li>
</ol>
<h2 id="总结">总结</h2>
<p>一个基本的Docker Swarm集群监控就搭建完成了</p>
<p>还有更高级的也许后面会更新一篇blog进行讲述.例如当某个值(CPU)达到某个阀值，发送钉钉或者slack消息进行告警</p>
<p>只要明白思路，实操基本上没有什么问题。</p>


        <h2>微信公众号</h2>
<p>扫描下面的二维码关注我们的微信公众号,第一时间查看最新内容。同时也可以关注我的Github，看看我都在了解什么技术，在页面底部可以找到我的Github。</p>
<img src="https://res.cloudinary.com/lyp/image/upload/v1581729955/hugo/blog.github.io/qrcode_for_sikekafeidou.jpg" alt="wechat-account-qrcode">


                <hr>

                <ul class="pager">
                    
                    <li class="previous">
                        <a href="/post/deploy-minio/" data-toggle="tooltip" data-placement="top" title="docker部署minio">&larr; docker部署minio</a>
                    </li>
                    
                    
                    <li class="next">
                        <a href="/post/deploy-command/" data-toggle="tooltip" data-placement="top" title="docker常用命令集合">docker常用命令集合 &rarr;</a>
                    </li>
                    
                </ul>

            
<script src="https://utteranc.es/client.js"
repo="liangyuanpeng/liangyuanpeng.github.io"
issue-term="title"
theme="github-light"
crossorigin="anonymous"
async>
</script>



            </div>

            


            
            <div class="
                col-lg-8 col-lg-offset-2
                col-md-10 col-md-offset-1
                sidebar-container">

                
                <section>
                    <hr class="hidden-sm hidden-xs">
                    <h5><a href="/tags/">FEATURED TAGS</a></h5>
                    <div class="tags">
                     
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                            <a href="/tags/blog" title="blog">
                                blog
                            </a>
                        
                    
                        
                    
                        
                            <a href="/tags/chirpstack" title="chirpstack">
                                chirpstack
                            </a>
                        
                    
                        
                    
                        
                            <a href="/tags/ci/cd" title="ci/cd">
                                ci/cd
                            </a>
                        
                    
                        
                    
                        
                            <a href="/tags/cloudnative" title="cloudnative">
                                cloudnative
                            </a>
                        
                    
                        
                            <a href="/tags/cncf" title="cncf">
                                cncf
                            </a>
                        
                    
                        
                    
                        
                            <a href="/tags/docker" title="docker">
                                docker
                            </a>
                        
                    
                        
                            <a href="/tags/docker-compose" title="docker-compose">
                                docker-compose
                            </a>
                        
                    
                        
                    
                        
                    
                        
                    
                        
                            <a href="/tags/fluentd" title="fluentd">
                                fluentd
                            </a>
                        
                    
                        
                    
                        
                    
                        
                            <a href="/tags/halo" title="halo">
                                halo
                            </a>
                        
                    
                        
                            <a href="/tags/hugo" title="hugo">
                                hugo
                            </a>
                        
                    
                        
                            <a href="/tags/image" title="image">
                                image
                            </a>
                        
                    
                        
                    
                        
                            <a href="/tags/iot" title="iot">
                                iot
                            </a>
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                            <a href="/tags/kubernetes" title="kubernetes">
                                kubernetes
                            </a>
                        
                    
                        
                    
                        
                    
                        
                    
                        
                            <a href="/tags/lorawan" title="lorawan">
                                lorawan
                            </a>
                        
                    
                        
                    
                        
                    
                        
                    
                        
                            <a href="/tags/middleware" title="middleware">
                                middleware
                            </a>
                        
                    
                        
                    
                        
                            <a href="/tags/mq" title="mq">
                                mq
                            </a>
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                            <a href="/tags/ops" title="ops">
                                ops
                            </a>
                        
                    
                        
                    
                        
                            <a href="/tags/prometheus" title="prometheus">
                                prometheus
                            </a>
                        
                    
                        
                    
                        
                    
                        
                            <a href="/tags/rpc" title="rpc">
                                rpc
                            </a>
                        
                    
                        
                    
                        
                            <a href="/tags/sofa" title="sofa">
                                sofa
                            </a>
                        
                    
                        
                            <a href="/tags/sofastack" title="sofastack">
                                sofastack
                            </a>
                        
                    
                        
                            <a href="/tags/springboot" title="springboot">
                                springboot
                            </a>
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                        
                    
                    </div>
                </section>



               

                
                
            </div>

            
            
            <div class="
            col-lg- col-lg-offset-2
            col-md-10 col-md-offset-1
            ">
            <section>
                <hr class="hidden-sm hidden-xs">
                

<h2>相关文章</h2>
<ul style="margin-bottom: 25px;">
    
    <li><a href="/post/deploy-command/">docker常用命令集合</a></li>
    
</ul>

            </section>
            </div>
            


        </div>
    </div>
</article>






<footer>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                <ul class="list-inline text-center">
                   
                    
                    <li>
                        <a target="_blank" href="https://github.com/liangyuanpeng">
                            <span class="fa-stack fa-lg">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-github fa-stack-1x fa-inverse"></i>
                            </span>
                        </a>
                    </li>
                   
                    
                    <li>
                        <a href="mailto:liangyuanpengem@163.com">
                            <span class="fa-stack fa-lg">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-envelope fa-stack-1x fa-inverse"></i>
                            </span>
                        </a>
                    </li>
		    

                    
                    <li>
                        <a href="https://twitter.com/lan31793328">
                            <span class="fa-stack fa-lg">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li>
                        <a target="_blank" href="https://www.zhihu.com/people/liangyuanpeng">
                            <span class="fa-stack fa-lg">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa  fa-stack-1x fa-inverse">知</i>
                            </span>
                        </a>
                    </li>
		    
                    
                    <li>
                        <a target="_blank" href="https://weibo.com/u/1908782280">
                            <span class="fa-stack fa-lg">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-weibo fa-stack-1x fa-inverse"></i>
                            </span>
                        </a>
                    </li>
		    

                    

		    
                    
                    
                </ul>
		<p class="copyright text-muted">
                    Copyright &copy; Hi,I`m lan , 2020
                    <br>
                    <a href="https://themes.gohugo.io/hugo-theme-cleanwhite">CleanWhite Hugo Theme</a> by <a href="https://zhaohuabing.com">Huabing</a> |
                    <iframe
                        style="margin-left: 2px; margin-bottom:-5px;"
                        frameborder="0" scrolling="0" width="100px" height="20px"
                        src="https://ghbtns.com/github-btn.html?user=zhaohuabing&repo=hugo-theme-cleanwhite&type=star&count=true" >
                    </iframe>
                </p>
            </div>
        </div>
    </div>
</footer>




<script>
    function async(u, c) {
      var d = document, t = 'script',
          o = d.createElement(t),
          s = d.getElementsByTagName(t)[0];
      o.src = u;
      if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
      s.parentNode.insertBefore(o, s);
    }
</script>






<script>
    
    if($('#tag_cloud').length !== 0){
        async("/js/jquery.tagcloud.js",function(){
            $.fn.tagcloud.defaults = {
                
                color: {start: '#bbbbee', end: '#0085a1'},
            };
            $('#tag_cloud a').tagcloud();
        })
    }
</script>


<script>
    async("https://cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.js", function(){
        var $nav = document.querySelector("nav");
        if($nav) FastClick.attach($nav);
    })
</script>







<script>
    
    var _baId = 'fad9c137f8ce239f9b323d36c871f8e6';

    
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "//hm.baidu.com/hm.js?" + _baId;
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
</script>







</body>
</html>
